import inherits from "inherits";

import CommandInterceptor from "diagram-js/lib/command/CommandInterceptor";

import { getBusinessObject, is } from "../../../util/ModelUtil";

/**
 * A behavior that unsets the Default property of
 * sequence flow source on element delete, if the
 * removed element is the Gateway or Task's default flow.
 *
 * @param {EventBus} eventBus
 * @param {Modeling} modeling
 */
export default function DeleteSequenceFlowBehavior(eventBus, modeling) {
  CommandInterceptor.call(this, eventBus);

  this.preExecute("connection.delete", function(event) {
    var context = event.context,
      connection = context.connection,
      source = connection.source;

    if (isDefaultFlow(connection, source)) {
      modeling.updateProperties(source, {
        default: null
      });
    }
  });
}

inherits(DeleteSequenceFlowBehavior, CommandInterceptor);

DeleteSequenceFlowBehavior.$inject = ["eventBus", "modeling"];

// helpers //////////////////////

function isDefaultFlow(connection, source) {
  if (!is(connection, "bpmn:SequenceFlow")) {
    return false;
  }

  var sourceBo = getBusinessObject(source),
    sequenceFlow = getBusinessObject(connection);

  return sourceBo.get("default") === sequenceFlow;
}
